package br.ufrj.dcc.mapaviolencia.util;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import br.ufrj.dcc.mapaviolencia.model.CategoriasViolencia;
import br.ufrj.dcc.mapaviolencia.model.Estado;
import br.ufrj.dcc.mapaviolencia.model.Noticia;

public class TextMiningUtil {

	public static final String SPECIAL_CHARACTERS_REGEX = "\\,|\\;|\\:|\\.|\\?|\\!";

	public static String clean(ArrayList<String> stopWords, String text){
		
		String regex = getRegex(stopWords);
        Matcher m = getMatcher(regex + "|" + SPECIAL_CHARACTERS_REGEX,text);
        String cleanMessage = m.replaceAll("");
        return cleanMessage.replaceAll("  ", " "); 
        
	}
	
	public static String specialCharClean(String text){
		
        Matcher m = getMatcher(SPECIAL_CHARACTERS_REGEX,text);
        String cleanMessage = m.replaceAll("");
        return cleanMessage.replaceAll("  ", " "); 
        
	}

	public static String getRegex(ArrayList<String> wordList){
        String lstr = wordList.toString();
		return lstr.substring(1, lstr.length()-1).replace(",", " |");
	}

	public static boolean match(String regex, String sentence){
		
		return getMatcher(regex,sentence).find();
	}
	
	public static Matcher getMatcher(String regex, String sentence){
		
		Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
		return p.matcher(sentence);
	}

	public static void defineCategorias(String textoNoticia, Noticia noticia) {
		String noticiaLimpa = TextMiningUtil.specialCharClean(textoNoticia);
		String[] tokensNoticia = noticiaLimpa.split(" ");
		boolean categoriaSetada = false;
		int contador = 0;
		for(CategoriasViolencia categorias : CategoriasViolencia.values()){
			for(int i = 0; i < categorias.tokens.size(); i++){
				for(int j = 0; j < tokensNoticia.length; j++){
					if(tokensNoticia[j].equals(categorias.tokens.get(i))){
						noticia.adicionaTipo(categorias.toString());
						categoriaSetada = true;
					}
					
				} 
			}
			if(categoriaSetada && contador == 7) break;
			if(categoriaSetada && contador == 8) break;
			if(contador == 9) break;
			contador++;
			
			
		}
		for(String s: noticia.getTipoViolencia()){
			System.out.println(s);
		}
	}
}
